<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <h2>响应式基础</h2>
      <p>{{ str }}</p>
      <p>{{ obj }}</p>
      <p>{{ msg }}</p>
      <p>count: {{ count }}</p>
      <button v-on:click="fn">btn</button>
    </div>

    <script src="./lib/vue3.js"></script>
    <script>
      // app相当于实例
      const app = Vue.createApp({
        // 可以通过data选项来声明响应式数据
        // data要写成函数并且return一个对象

        // data函数会自动执行，并且用proxy对返回的对象进行处理
        // 不需要关注处理的结果，正常使用就行了
        // 并且将data的顶层属性直接挂载到了app实例上

        // data里面的值需要有初始值, 否则不会被添加到proxy中

        // data里面定义的属性，不要用_或者$开头
        data() {
          return {
            str: "hello",
            obj: {
              a: 3,
            },
            msg: null,
            count: 1,
          };
        },

        // methods用于定义方法
        // methods里面的方法，不要使用箭头函数，导致this指向错误

        methods: {
          fn: function () {
            this.count++;
          },
          // fn: () => {
          //   this.count++;
          // },
        },

        // mounted() {
        //   // console.log(this.obj);
        //   setTimeout(() => {
        //     // this.obj.a = 30;

        //     this.msg = "hello world";
        //   }, 1000);
        // },
      }).mount("#app");
    </script>
  </body>
</html>
